/**
 * Definition for singly-linked list.
 * function ListNode(val, next) {
 *     this.val = (val===undefined ? 0 : val)
 *     this.next = (next===undefined ? null : next)
 * }
 */
/**
 * @param {ListNode} head
 * @param {number} k
 * @return {ListNode}
 */
var rotateRight = function(head, k) {
    if ( k === 0 || !head || !head.next ) {
        return head
    }
    let getLength = list => {
        let index = 1;
        while( list.next ){
            list = list.next;
            index++
        }
        return index
    }
    k  = k % (getLength(head) * 2);
    let moveList = list => {
        // 定义一个返回值
        let res = null;
        // 遍历找到最后一个
        while ( list.next && list.next.next ) {
            list = list.next
        }
        // 将最后一个赋值给新的链表
        res = list.next;
        // 删除最后一个
        list.next = null;
        // 返回被删的最后一个
        return res
    }
    // 新的链表
    let delNode = null;
    // 循环移动
    for ( ; k > 0; k-- ) {
        // 执行移动的方法
        delNode = moveList( head );
        // 将删除最后一个节点的链表，赋值给新的链表
        delNode.next = head;
        // 将新的链表赋值给list
        head = delNode;
    }
    return head

};
